#include "sommet.h"

//--------------------- Constructeurs et destructeur -------------------

/*
 * Constructeur par défault, on initialise le point à la position (0.0, 0.0, 0.0)
 * avec _u et _v égales à (0.0)
 */
Sommet::Sommet()
{
    this->_u=this->_v=0.0;
    _point = new Point();
}

/*
 * Constructeur à 5 paramètres, on initialise le point à la position (x, y, v)
 * avec _u et _v égales à (u, v)
 */
Sommet::Sommet(GLfloat x, GLfloat y, GLfloat z, GLfloat u, GLfloat v)
    : _u(u), _v(v)
{
    _point = new Point(x, y, z);
}


/*
 * Constructeur à 3 paramètres
 * @param p : point du sommet
 * @param u : coordonnées u du sommet
 * @param v : coordonnées v du sommet
 */
Sommet::Sommet(const Point& p, GLfloat u, GLfloat v)
    : _u(u) , _v(v)
{
    *_point = p;
}

/*
 * Constructeur par recopie
 * @param s : sommet à recopier
 */
Sommet::Sommet(const Sommet &s)
    : _point(s._point), _u(s._u), _v(s._v)
{
}

//Destructeur du sommet
Sommet::~Sommet()
{
    delete _point;
}

//--------------------- Accesseurs -------------------------------------

/*
 * On renvoie la coordonnée de texture en u
 * @return GLfloat : coordonnée de la texture en u du sommet
 */
GLfloat Sommet::getU()
{
    return _u;
}

/*
 * On renvoie la coordonnée de texture en v
 * @return GLfloat : coordonnée de texture en v du sommet
 */
GLfloat Sommet::getV()
{
    return _v;
}

/*
 * On renvoie la coordonnée de texture en v
 * @return GLfloat : coordonnée de texture en v du sommet
 */
GLfloat Sommet::getX()
{
    return _point->getX();
}

/*
 * On renvoie la coordonnée de texture en v
 * @return GLfloat : coordonnée de texture en v du sommet
 */
GLfloat Sommet::getY()
{
    return _point->getY();
}

/*
 * On renvoie la coordonnée de texture en v
 * @return GLfloat : coordonnée de texture en v du sommet
 */
GLfloat Sommet::getZ()
{
    return _point->getZ();
}

/*
 * On renvoie le point du sommet
 * @return Point& : le point du sommet
 */
Point& Sommet::getPoint()
{
    return *_point;
}

/*
 * On affecte u par une nouvelle valeur
 * @param u : nouvelle valeur d e_u
 */
void Sommet::setU(GLfloat u)
{
    this->_u = u;
}

/*
 * On affecte v par une nouvelle valeur
 * @param z : nouvelle valeur de v
 */
void Sommet::setV(GLfloat v)
{
    this->_v = v;
}

//----------------------------------------------------------------------
//--------------------- Surcharge des opérateurs -----------------------


//----------------------------------------------------------------------





